home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / timex.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.8 KB  |  89 lines

  1. /*
  2.  *  include/asm-s390/timex.h
  3.  *
  4.  *  S390 version
  5.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  6.  *
  7.  *  Derived from "include/asm-i386/timex.h"
  8.  *    Copyright (C) 1992, Linus Torvalds
  9.  */
  10.  
  11. #ifndef _ASM_S390_TIMEX_H
  12. #define _ASM_S390_TIMEX_H
  13.  
  14. /* Inline functions for clock register access. */
  15. static inline int set_clock(__u64 time)
  16. {
  17.     int cc;
  18.  
  19.     asm volatile(
  20.         "   sck   0(%2)\n"
  21.         "   ipm   %0\n"
  22.         "   srl   %0,28\n"
  23.         : "=d" (cc) : "m" (time), "a" (&time) : "cc");
  24.     return cc;
  25. }
  26.  
  27. static inline int store_clock(__u64 *time)
  28. {
  29.     int cc;
  30.  
  31.     asm volatile(
  32.         "   stck  0(%2)\n"
  33.         "   ipm   %0\n"
  34.         "   srl   %0,28\n"
  35.         : "=d" (cc), "=m" (*time) : "a" (time) : "cc");
  36.     return cc;
  37. }
  38.  
  39. static inline void set_clock_comparator(__u64 time)
  40. {
  41.     asm volatile("sckc 0(%1)" : : "m" (time), "a" (&time));
  42. }
  43.  
  44. static inline void store_clock_comparator(__u64 *time)
  45. {
  46.     asm volatile("stckc 0(%1)" : "=m" (*time) : "a" (time));
  47. }
  48.  
  49. #define CLOCK_TICK_RATE    1193180 /* Underlying HZ */
  50.  
  51. typedef unsigned long long cycles_t;
  52.  
  53. static inline unsigned long long get_clock (void)
  54. {
  55.     unsigned long long clk;
  56.  
  57. #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
  58.     asm volatile("stck %0" : "=Q" (clk) : : "cc");
  59. #else /* __GNUC__ */
  60.     asm volatile("stck 0(%1)" : "=m" (clk) : "a" (&clk) : "cc");
  61. #endif /* __GNUC__ */
  62.     return clk;
  63. }
  64.  
  65. static inline unsigned long long get_clock_xt(void)
  66. {
  67.     unsigned char clk[16];
  68.  
  69. #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
  70.     asm volatile("stcke %0" : "=Q" (clk) : : "cc");
  71. #else /* __GNUC__ */
  72.     asm volatile("stcke 0(%1)" : "=m" (clk)
  73.                    : "a" (clk) : "cc");
  74. #endif /* __GNUC__ */
  75.  
  76.     return *((unsigned long long *)&clk[1]);
  77. }
  78.  
  79. static inline cycles_t get_cycles(void)
  80. {
  81.     return (cycles_t) get_clock() >> 2;
  82. }
  83.  
  84. int get_sync_clock(unsigned long long *clock);
  85. void init_cpu_timer(void);
  86. unsigned long long monotonic_clock(void);
  87.  
  88. #endif
  89.